package com.idc.test;

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;

import com.alibaba.excel.metadata.data.FormulaData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;

public class BonusFormulaHandler implements CellWriteHandler {
	
//	private CellStyle hiddenStyle;
//
//    @Override
//    public void afterCellDispose(CellWriteHandlerContext context) {
//		if (hiddenStyle == null) {
//            Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
//            hiddenStyle = workbook.createCellStyle();
//            hiddenStyle.setLocked(true);    // 锁定单元格
//            hiddenStyle.setHidden(true);    // 隐藏公式
//        }
//        // 在第四列（奖金列）设置公式：薪资 * 奖金比例
//        if (context.getColumnIndex() == 3) {
//			// 动态创建第四列并设置公式
//			Row row = context.getRow();
//			int rowNum = row.getRowNum() + 1; // Excel行号从1开始
//			if (rowNum > 1) {
//				// 创建第四列的单元格并设置公式
//				Cell cell = row.createCell(3);
//				cell.setCellFormula("B" + rowNum + "*C" + rowNum);
//				cell.setCellStyle(hiddenStyle);
//			}
//        }
//        
//    }
    
    private CellStyle hiddenStyle;

    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        // 初始化隐藏样式（仅一次）
        if (hiddenStyle == null) {
            Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
            hiddenStyle = workbook.createCellStyle();
            hiddenStyle.setLocked(true);
            hiddenStyle.setHidden(true);
        }

		Row row = context.getRow();
		if (row.getCell(3) == null) {
			row.createCell(3);
		}

        // 仅处理第四列（奖金列）
        if (context.getColumnIndex() == 3) {
            WriteCellData<?> cellData = context.getFirstCellData();
            int excelRowNum = context.getRowIndex() + 1; // 行号从1开始（假设表头占1行）

            // 设置公式（仅数据行，跳过表头）
            if (excelRowNum > 1) { 
				FormulaData formulaData = new FormulaData();
				formulaData.setFormulaValue("B" + excelRowNum + "*C" + excelRowNum);
				cellData.setFormulaData(formulaData);
				WriteCellStyle writeCellStyle = new WriteCellStyle();
				writeCellStyle.setLocked(true); // 锁定单元格
				writeCellStyle.setHidden(true); // 隐藏公式
				cellData.setWriteCellStyle(writeCellStyle);
            }
        }
    }
}
